package com.example.javademo;

import android.content.Intent;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.PopupWindow;
import android.widget.Toast;

import androidx.activity.EdgeToEdge;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;

public class PopupActivity extends AppCompatActivity {

    // 定义一个 ActivityResultLauncher
    private ActivityResultLauncher<Intent> activityResultLauncher;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_popup);

        // 注册 launcher
        /*
        * 1.创建ActivityResultLauncher对象
        * 2.注册ActivityResultLauncher对象
        * 3.在onActivityResult方法中处理返回结果
        * */
        activityResultLauncher = registerForActivityResult(
            new ActivityResultContracts.StartActivityForResult(),
            result -> {
                int resultCode = result.getResultCode();
                Intent data = result.getData();

                if (resultCode == RESULT_OK && data != null) {
                    String name = data.getStringExtra("name");
                    Toast.makeText(this, "用户名：" + name, Toast.LENGTH_SHORT).show();
                } else if (resultCode == RESULT_CANCELED) {
                    Toast.makeText(this, "取消", Toast.LENGTH_SHORT).show();
                }
            }
        );
    }

public void jump(View view) {
    Intent intent = new Intent(this, FormActivity.class);
    intent.putExtra("name", "张三");
    intent.putExtra("age", 18);
    Student student = new Student("张三", 18);
    intent.putExtra("student", student);
    activityResultLauncher.launch(intent);  // 启动并等待结果
}


    /* 显示启动 */
    public void linkClick(View view){
        Intent intent = new Intent(this,MainActivity.class);
        startActivity(intent);
    }

    public void clickPopup(View view){
//        注释：创建PopupWindow对象时，需要传入PopupWindow的布局文件
        View popupView = getLayoutInflater().inflate(R.layout.popup_layout, null);
        // 创建PopupWindow，参数：布局文件，宽高
        PopupWindow popupWindow = new PopupWindow(popupView,
                ViewGroup.LayoutParams.WRAP_CONTENT,
                ViewGroup.LayoutParams.WRAP_CONTENT,
                true);
//        popupWindow.setContentView(R.layout.popup_layout);

        /*
        * 设置背景
        * */
        popupWindow.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));

        /*
        * 设置Popup响应外部点击事件
        * */
        popupWindow.setOutsideTouchable(true);
        /*
        * 1.创建动画资源
        * 2.创建style应用动画资源
        * 3.对当前动画风格设置为步骤2
        * */
        popupWindow.setAnimationStyle(R.style.popup_anim_style);


        /*
         *  参数1: 显示PopupWindow的控件
         *  参数2: 显示PopupWindow的控件的偏移量
         *  参数3: 显示PopupWindow的控件的偏移量
         * */
        popupWindow.showAsDropDown(view, 100, 0);

        /*
        * 子项点击事件
        * */

// ✅ 从 popupView 中查找子项
        popupView.findViewById(R.id.p1).setOnClickListener(v -> {
            Toast.makeText(this, "点击了1", Toast.LENGTH_SHORT).show();
            popupWindow.dismiss(); // 可选：点击后关闭
        });

        popupView.findViewById(R.id.p2).setOnClickListener(v -> {
            Toast.makeText(this, "点击了2", Toast.LENGTH_SHORT).show();
            popupWindow.dismiss();
        });

        popupView.findViewById(R.id.p3).setOnClickListener(v -> {
            Toast.makeText(this, "点击了3", Toast.LENGTH_SHORT).show();
            popupWindow.dismiss();
        });
    }


    public void clickPopup2(View view){
        final String[] items = {"JAVA", "C++", "C#", "Python", "PHP"};
        /*
        * 数组适配器
        * 参数1：上下文
        * 参数2：自定义的列表项布局文件（每个选择项的 UI 样式）
        * 参数3：布局文件中用于显示文本的控件 ID（适配器会把数组中的文字放到这个控件里）。
        * 参数3：数据源
        * */
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.popup_customize,R.id.item_tx, items);
        /* 构建对话框 */
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("请选择语言");
        /*
        * 为 AlertDialog 设置一个可点击的列表项，并监听用户的点击事件
        * setAdapter 是 AlertDialog.Builder 的方法，用于设置一个可点击的列表项。
            第一个参数是适配器（ArrayAdapter），告诉对话框如何显示每一项。
            第二个参数是点击监听器（DialogInterface.OnClickListener），当用户点击某一项时会触发。
            * dialog：当前点击的对话框对象。
            * which：用户点击的是第几项（索引，从 0 开始）。
        * */
        builder.setAdapter(adapter, (dialog, which) -> {
            Toast.makeText(this, "你选择了" + items[which], Toast.LENGTH_SHORT).show();
        });
        builder.create().show();

    }

    public  void implicitClick(View view){
        /*
        * 隐式启动
        * ACTION_VIEW: 查看,参数1作用：跳转的页面
        * URI: 统一资源标识符,参数2为URI
        * */
        Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://www.baidu.com"));
        startActivity(intent);
    }


    public void implicitClick2(View view){
        /*
        * 隐式启动 -- Activity
        * 参数1：跳转的页面
        * 参数2：跳转的页面的参数
        * */
        Intent intent = new Intent("FormActivityView");
        startActivity(intent);
    }

    /*
    * 待结果返回参数
    * */
    /*public void jump(View view){
        Intent intent = new Intent(this, FormActivity.class);
        *//*
        * 启动活动并等待结果返回
        * 参数1：要启动的活动
        * 参数2：请求码，用于标识启动的活动
        * 旧版本11.0及以下版本使用的
        * *//*
        startActivityForResult(intent, 1);
    }*/

    /*
    * 待结果返回参数
    * requestCode 请求码，用于标识启动的活动
    * resultCode 结果码，用于标识返回的结果
    * data 包含返回数据的 Intent 对象
    * */
    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        Log.d("TAG", "onActivityResult: requestCode"+requestCode+"resultCode"+resultCode);
        if (requestCode == 1 && resultCode == RESULT_OK){
            String name = data.getStringExtra("name");
            Toast.makeText(this, "用户名：" + name, Toast.LENGTH_SHORT).show();
        } else if (requestCode == 1 && resultCode == RESULT_CANCELED) {
            Toast.makeText(this, "取消", Toast.LENGTH_SHORT).show();
        }
    }

}